Репозиторії та робота з базами даних (@Repository, JPA, Hibernate)

У Spring Boot репозиторії використовуються для взаємодії з базами даних. Найчастіше застосовується Spring Data JPA, яка спрощує роботу з ORM (Object-Relational Mapping) завдяки Hibernate. JPA дозволяє абстрагуватися від конкретного механізму роботи з базами даних і зменшує обсяг написаного коду.

1. Анотація @Repository

Анотація @Repository позначає клас, який працює з базою даних. Spring автоматично реєструє такі компоненти. Репозиторій слугує рівнем абстракції між бізнес-логікою та базою даних, що полегшує тестування і підтримку коду.

                
                @Repository
                public interface UserRepository extends JpaRepository {
                    List findByName(String name);
                    Optional findByEmail(String email);
                }
                
            

2. Використання JPA

JPA (Java Persistence API) дозволяє працювати з сутностями бази даних через об'єктно-реляційне відображення (ORM). Це означає, що ми можемо працювати з базою даних за допомогою Java-об'єктів без прямого написання SQL-запитів.

                
                @Entity
                @Table(name = "users")
                public class User {
                    @Id
                    @GeneratedValue(strategy = GenerationType.IDENTITY)
                    private Long id;
                    
                    @Column(nullable = false)
                    private String name;
                    
                    @Column(unique = true, nullable = false)
                    private String email;
                }
                
            

3. Конфігурація бази даних

Приклад конфігурації для MySQL у application.properties:

                
                spring.datasource.url=jdbc:mysql://localhost:3306/mydb
                spring.datasource.username=root
                spring.datasource.password=pass
                spring.jpa.hibernate.ddl-auto=update
                spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
                
            

Можливі значення spring.jpa.hibernate.ddl-auto:

4. Використання у сервісному шарі

Репозиторій можна використовувати у сервісі для отримання, збереження та оновлення даних.

                
                @Service
                public class UserService {
                    private final UserRepository userRepository;
                    
                    public UserService(UserRepository userRepository) {
                        this.userRepository = userRepository;
                    }
                    
                    public List getAllUsers() {
                        return userRepository.findAll();
                    }
                    
                    public Optional getUserByEmail(String email) {
                        return userRepository.findByEmail(email);
                    }
                    
                    public User createUser(User user) {
                        return userRepository.save(user);
                    }
                }
                
            

5. Виконання SQL-запитів вручну

Spring Data JPA дозволяє виконувати кастомні SQL-запити через анотацію @Query:

                
                @Repository
                public interface UserRepository extends JpaRepository {
                    @Query("SELECT u FROM User u WHERE u.email = :email")
                    User findByEmailCustom(@Param("email") String email);
                }
                
            

Назад Далі